package nextel.ruta.rms;

import nextel.ruta.bean.RutaPorCodigoBean;
import pe.com.nextel.rms.GestorRMS;
import pe.com.nextel.rms.Persistente;
import java.util.Stack;
import pe.com.nextel.util.ArrayList;
import pe.com.nextel.util.Arrays;
import pe.com.nextel.util.List;

/**
 *
 * @author eespinoza
 */
public class RMSRutaPorCodigo extends GestorRMS {
    
    private RutaPorCodigoBean codigoRuta = new RutaPorCodigoBean();
    
    
    public RMSRutaPorCodigo() {
        super("INDXCODRUTA");
        
    }
    
    protected Persistente createObjectBean() {
        return  codigoRuta ;
    }
    
    public RutaPorCodigoBean buscarRuta( String codigo) throws Exception{
        try {
            abrirRS();
            RutaPorCodigoBean clienteReturn = null;
            
            RutaPorCodigoBean cliente = new RutaPorCodigoBean( );
            cliente.setCodigoRuta(codigo);
            
            int tamanio = getNumRecords();
            
            if(tamanio==0) {
                throw new Exception("Sincronizar");
            }
            
            int inicio = 1;
            int fin = tamanio;
            int pos;
            boolean flag = false;
            List lista = null;
            int i = 0;
            
            while(inicio <= fin){
                pos = (inicio + fin) / 2; 
                lista = getRecordList(pos);  
                i = Arrays.esMayorMenor(lista , cliente); 
                if ( i >= 0 ) {
                    flag  = true;
                    break;
                } else if (i == -2) { //es menor
                    
                    inicio = pos + 1;
                } else if( i== -1 ){ // es mayor
                    
                    fin = pos - 1;
                }
            }
            
            if(flag){
                //pos = Arrays.find(lista, cliente);
                clienteReturn = (RutaPorCodigoBean)lista.get(i);
            }
            
            if(lista != null){
                lista.clear();
                lista = null;
            }
            
            System.gc();
            
            return clienteReturn;
            
        } finally {
            cerrarRS();
        }
    }
    
}
